// 工厂模式是用来创建对象的常见设计模式，在不暴露创建对象的具体逻辑，而是将逻辑进行封装，那么它就可以被称为工厂。工厂模式又叫做静态工厂模式，由一个工厂对象决定创建某一个类的实例。

// 优点：
// 1 调用者创建对象时只要知道其名称即可
// 2 扩展性高，如果要新增一个产品，直接扩展一个工厂类即可。
// 3 隐藏产品的具体实现，只关心产品的接口。

// 缺点：
// 每次增加一个产品时，都需要增加一个具体类，这无形增加了系统内存的压力和系统的复杂度，也增加了具体类的依赖

// 例子：
// 一个服装厂可以生产不同类型的衣服，我们通过一个工厂方法类来模拟产出

class DownJacket {
  production() {
    console.log('生产羽绒服');
  }
}
class Underwear {
  production() {
    console.log('生产内衣');
  }
}
class TShirt {
  production() {
    console.log('生产t恤');
  }
}
// 工厂类
class clothingFactory {
  constructor() {
    this.downJacket = DownJacket;
    this.underwear = Underwear;
    this.t_shirt = TShirt;
  }
  getFactory(clothingType) {
    const _production = new this[clothingType]();
    return _production.production();
  }
}
const clothing = new clothingFactory();
clothing.getFactory('t_shirt'); // 生产t恤
